#ifndef __SocketIO_H__
#define __SocketIO_H__

namespace xww
{

class SocketIO
{
public:
    SocketIO(int fd)
    : _fd(fd)
    {}

    int readn(char * buff, int len);
    int sendn(const char * buff, int len);
    
    //maxlen：表示一行最大的字节数
    //readline函数的作用是从socket缓冲区中读取一行数据
    //它会一直读取直到遇到换行符或达到最大长度maxlen
    //返回值：如果成功，返回读取的字节数；如果出错或连接关闭，返回-1
    //buff：用于存储读取的一行数据
    //maxlen：表示缓冲区的大小
    //注意：如果读取到的行长度超过maxlen，可能会导致缓冲区溢出
    //因此需要确保maxlen足够大以容纳一行
    //如果读取到的行长度小于maxlen，函数会在行末添加'\0'字符
    //以确保返回的字符串是以'\0'结尾的
    //如果读取到的行长度等于maxlen，函数不会添加'\0'
    int readline(char * buff, int maxlen);

    //peek函数的作用是查看socket缓冲区中的数据，但不从缓冲区中移除它们
    //它可以用于检查是否有数据可读，而不会改变缓冲区的状态
    //返回值：如果成功，返回读取的字节数；如果出错或连接关闭，返回-1
    //buff：用于存储读取的数据
    //maxlen：表示缓冲区的大小
    //注意：peek函数不会修改缓冲区中的数据，只是查看它们
    int recvPeek(char * buff, int maxlen) const;

private:
    int _fd;
};

}//end of namespace wd


#endif

